package com.sjms._12_行为_代理模式._1_静态代理;

/**
 * 代理模式
 * 在开发者的角度来看，创建一个代理对象，提供给用户使用，避免用户直接访问真正的对象
 * 在用户角度来看，就是普通的类方法调用
 * <p>
 * 作用
 * 1.保护被代理对象
 * 2.增强被代理对象
 * 3.完全替换被代理对象
 * <p>
 * 静态代理：
 * 1.被代理对象与代理对象，需要实现相同的接口或继承相同的父类
 * 2.代理对象聚合被代理对象
 * 3.客户端，创建代理对象，创建被代理对象，把被代理对象传入代理对象中
 * 4.客户端调用，代理对象的同名方法
 * 代码示例：《帮爸爸买菜》
 * 1.妈妈（客户端，测试类，调用爸爸去买菜）、工具人抽象（公共抽象，包含扫地与买菜等方法）、爸爸（被代理者）、儿子（代理者，代理爸爸去买菜）
 * 2.爸爸与儿子都实现工具人抽象类
 */
public class _Test_Mom {

    public static void main(String[] args) {

        System.out.println("妈妈：他爸!!!去买点菜");

        Father tool = new Father();

        //设置代理类
        tool.setProxy(new Son());

        //执行购买动作，返回购买的东西
        String buy = tool.buy();

        System.out.println("爸爸：" + buy);

    }

}
